==== QUESTION 1 ====

/!\ WARNING : chi² –> test d’indépendance : H0 “Les données sont indépendantes”. La p-value correspond au risque de se tromper en rejettant H0. Donc si p>0.05 –> on ne rejette pas H0, les données sont indépendantes, pas de relation entre elles ni d’implication. Donc si p<=0.05 –> on rejette H0, les données sont dépendantes, il existe une relation entre elles.

library(tidyverse)
library(ade4)
library(vegan)

–> communautés : quelles sont les espèces qui vivent ensemble ? même localisation ? exemple : Est-ce que pinson toujours avec pie ? –> habitat : différentes répartitions selon la localisation ? exemple : Quand il fait chaud, les pinsons ne blairent plus les pies ?

==> impact de l’environnement sur la répartition des espèces –> interactions ou évitements

ANALYSE : ==> test du Chi² pour vérifier la dépendance entre les données localisations et présence de l’espèce ==> ACM(commu) : nous avons des données utilisant des modalités simples avec j individus et i localisations ==> expected : groupes d’oiseaux, oiseaux “ubiquitaires” ==> test corrélation des variables entre-elles pour diminuer le nombre de variables à étudier ==> ACP(habitat) : lissage des données qualitatives au besoin, réduction du nombre de variables ==> co-inertie = ACM+ACP : couplage de tableaux entre habitat et répartition espèces ==> expected : présence de cluster en fonction de certaines caractéristiques du milieu

==> conclure : comportements différents selon la qualité de vie du milieu (caractéristiques ciblées par l’analyse)

suite analyse pour q3

Ouverture des documents

habitat = read.table("../data/habitat.tsv", sep = "\t",
                     stringsAsFactors = T, header = T, na.strings = T)
especes = read.table("../data/especes.tsv", sep = "\t",
                     stringsAsFactors = T, header = T, na.strings = T)
commu = read.table("../data/communautes.tsv", sep = "\t",
                     stringsAsFactors = T, header = T, na.strings = T)

Test du X² : indépendance entre présence de l’espèce et caractéristiques du milieu ?

#test de la répartition d'une espèce d'oiseau en fonction de l'environnement
commu_clean = commu[,-1]
habitat_clean = habitat[,-1]
esp = colnames(commu_clean[1,])
hab = colnames(habitat_clean[1,])

write(x = "Test de chi2 sur la répartition d'une espèce d'oiseau en fonction de l'environnement", file = "chi-2_q1_export.txt", append = F)
n=0
for (i in 1:length(commu_clean[1,])){
  n=n+1
  commuI = paste("\n----------", esp[n], "----------")
  write(x = commuI, file = "chi-2_q1_export.txt", append = T)
  m = 0
  for (j in 1:length(habitat_clean[1,])){
    m=m+1
    chi2 = chisq.test(commu_clean[,i], habitat_clean[,j])
    habitatI = paste(hab[m], ":", chi2$p.value)
    write(x = habitatI, file = "chi-2_q1_export.txt", append = T)
  }
}

write(x = "Résultats d'indépendance entre les données", file = "chi-2_q1_export_indep.txt", append = F)
write(x = "Résultats de dépendance entre les données", file = "chi-2_q1_export_dep.txt", append = F)
n=0
for (i in 1:length(commu_clean[1,])){
  n=n+1
  commuI = paste("\n----------", esp[n], "----------")
  write(x = commuI, file = "chi-2_q1_export_indep.txt", append = T)
  write(x = commuI, file = "chi-2_q1_export_dep.txt", append = T)
  m = 0
  for (j in 1:length(habitat_clean[1,])){
    m=m+1
    chi2 = chisq.test(commu_clean[,i], habitat_clean[,j])
    habitatI = paste(hab[m], ":", chi2$p.value)
    
    if (chi2$p.value<0.05){
      write(x = habitatI, file = "chi-2_q1_export_dep.txt", append = T)
    }
    else{
      write(x = habitatI, file = "chi-2_q1_export_indep.txt", append = T)
    }
  }
}

pathfile : chi-2_q2_export_dep.txt

pathfile : chi-2_q2_export_indep.txt

pathfile : chi-2_q2_export.txt

ACP normée sur environnement (habitat)

plot(habitat)

res = chisq.test(habitat[,4:19]) ; res
## 
##  Pearson's Chi-squared test
## 
## data:  habitat[, 4:19]
## X-squared = 690042, df = 13695, p-value < 2.2e-16
# Dépendance des données

acp_habitat = dudi.pca(habitat[,4:19], scale=T, nf = 2, scannf = F)
plot(acp_habitat$li,
     pch = 3)

s.corcircle(acp_habitat$co,
            grid = F)

acp_habitat$c1
##                CS1          CS2
## long   -0.28220786  0.096503992
## lat    -0.21011116  0.361947976
## agri   -0.24629728  0.145164973
## arbu    0.04667534 -0.300078275
## prai   -0.12185444  0.161730500
## hydro   0.09465626  0.007728365
## foret   0.31571473 -0.078104816
## heter  -0.25723888 -0.299136122
## ecot   -0.23874791 -0.404577352
## fcoeur  0.31705334  0.171227746
## lisi   -0.20887190 -0.397278555
## pente   0.29376299 -0.217028999
## alt     0.32254790 -0.071134350
## prec    0.33365837 -0.164285853
## temp   -0.30359650  0.144051605
## bati   -0.16950428 -0.419555865
# 1 variable expliquant peu le modèle : hydro (faible pourcentage d'explication des axes, <10%)

AFC sur répartition des espèces (commu)

plot(commu)

res = chisq.test(commu[,2:17]) ; res
## 
##  Pearson's Chi-squared test
## 
## data:  commu[, 2:17]
## X-squared = 8237.7, df = 13695, p-value = 1
# Indépendance des données

afc1 = dudi.coa(commu[,-1], nf=2, scannf = F) ; afc1
## Duality diagramm
## class: coa dudi
## $call: dudi.coa(df = commu[, -1], scannf = F, nf = 2)
## 
## $nf: 2 axis-components saved
## $rank: 15
## eigen values: 0.3929 0.1814 0.1501 0.1374 0.1232 ...
##   vector length mode    content       
## 1 $cw    16     numeric column weights
## 2 $lw    914    numeric row weights   
## 3 $eig   15     numeric eigen values  
## 
##   data.frame nrow ncol content             
## 1 $tab       914  16   modified array      
## 2 $li        914  2    row coordinates     
## 3 $l1        914  2    row normed scores   
## 4 $co        16   2    column coordinates  
## 5 $c1        16   2    column normed scores
## other elements: N
barplot(afc1$eig)

scatter(afc1)

Couplage de tableaux entre AFC (tableau espèce) et une ACP normée (tableau habitat)

# Log des données
caract_habitat = habitat[,-(1:3)]
log_habitat = log(caract_habitat +1)

cca = pcaiv(afc1, log_habitat, scannf = F, nf = 2)

#projection axe d'inertie
s.corcircle(cca$as)

# Position des relevés par combinaisons de variables environnementales : représentation des sites
s.label(cca$l1, clabel = 0, cpoint = 1.5)

# Position des espèces à la moyenne des sites qui les contiennent : représentation des espèces
s.label(cca$co, add.plot = T)

# Poids canoniques donnant les combinaisons de variance unité
s.arrow(cca$fa)

# Prédiction des positions par régression sur les variables de milieu
s.match(cca$li, cca$ls, clabel = 0.5)

# Ensemble des résultats de l'analyse
plot(cca)

ACC sur les données HABITAT x COMMU

acc1 = cca(commu[,-1], caract_habitat)
plot(acc1)

#répartition lisière de foret et foret à l'opposé, coeur de la foret corrélé à foret

acc2 = cca(commu[,-1] ~ bati + agri + arbu + fcoeur + prai + foret, caract_habitat)
plot(acc2)

#explication de la répartition avec les conditions occupations du sol et urbanisation
#agri, bati, hydro, foret à conserver

acc3 = cca(commu[,-1] ~ bati + agri + fcoeur + foret, caract_habitat)
plot(acc3)

# urbanisation opposé à réseau hydrographique, surface agricole opposé à foret

Localisation des espèces en fonction des autres

#test de la répartition d'une espèce d'oiseau en fonction des autres espèces
commu_clean = commu[,-1]
esp = colnames(commu_clean[1,])
taille = length(commu_clean[1,])-1

write(x = "Test de chi2 sur la répartition d'une espèce d'oiseau en fonction des autres", file = "chi-2_q1_export2.txt", append = F)
for (i in 1:taille){
  commuI = paste("\n----------", esp[i], "----------")
  write(x = commuI, file = "chi-2_q1_export2.txt", append = T)
  deb = i+1
  for (j in deb:taille){
    chi2 = chisq.test(commu_clean[,i], commu_clean[,j])
    espI = paste(esp[j], ":", chi2$p.value)
    write(x = espI, file = "chi-2_q1_export2.txt", append = T)
  }
}

write(x = "Résultats d'indépendance entre les données", file = "chi-2_q1_export2_indep.txt", append = F)
write(x = "Résultats de dépendance entre les données", file = "chi-2_q1_export2_dep.txt", append = F)
for (i in 1:taille){
  commuI = paste("\n----------", esp[i], "----------")
  write(x = commuI, file = "chi-2_q1_export2_indep.txt", append = T)
  write(x = commuI, file = "chi-2_q1_export2_dep.txt", append = T)
  deb = i+1
  for (j in deb:taille){
    chi2 = chisq.test(commu_clean[,i], commu_clean[,j])
    espI = paste(esp[j], ":", chi2$p.value)
    
    if (chi2$p.value<0.05){
      write(x = espI, file = "chi-2_q1_export2_dep.txt", append = T)
    }
    else{
      write(x = espI, file = "chi-2_q1_export2_indep.txt", append = T)
    }
  }
}

discrim needs class

Co-inertie

couplage = cbind(commu[,-1], habitat[,-1])
habitat_numerique = habitat[,-(1:3)]

#AFC sur tableau de comptage
afc_commu = dudi.coa(commu[,-1], nf=2, scannf = F)
scatter(afc_commu)

#ACP normée sur milieu
acp_habitat = dudi.pca(habitat_numerique, scale=T, nf = 2, scannf = F)
#set même poids partout
acp_habitat$lw <- rep(1, length(acp_habitat$lw))
afc_commu$lw <- rep(1, length(afc_commu$lw))

coinertie = coinertia(acp_habitat, afc_commu, scannf = F, nf = 2)
plot(coinertie)

scatter(coinertie)

#AFC sur couplage
afc_couplage = dudi.coa(couplage, scannf = F, nf = 2)
scatter(afc_couplage)

==== QUESTION 2 ====

–> espèces : caractéristiques

–> habitat : caractéristiques

==> impact de l'habitat sur les caractéristiques de l'espèce

–> petit ou grand selon la température, etc …

Ouverture des données :

habitat = read.table("../data/habitat.tsv", sep = "\t",
                     stringsAsFactors = T, header = T, na.strings = T)
especes = read.table("../data/especes.tsv", sep = "\t",
                     stringsAsFactors = T, header = T, na.strings = T)
commu = read.table("../data/communautes.tsv", sep = "\t",
                   stringsAsFactors = T, header = T, na.strings = T)

habitat = habitat[,-2:-3]
name = colnames(habitat)
colnames(habitat) = name

ANALYSE :

==> extraire informations précédentes = subset par colonnes dont on extrait les numéros des localisations

Création des subsets de numéro de lieu ayant des Gem (Colombe.a.croissants)

# Récupération des noms des colonnes correspondant aux espèces (colonnes 2 à 17)
vectNom = names(commu[2:17])

# Création d'une liste vide pour stocker les sous-ensembles
listSubsets = list()
# Parcours de toutes les espèces
for (i in 1:length(vectNom)) {
  especesActu = vectNom[i]
  # Extraction des numéros de lieu (IdPE) où l'espèce a une présence (valeur 1)
  foosubset = commu$IdPE[commu[[especesActu]] == 1]
  listSubsets[[especesActu]] = foosubset
}

listSubsets$Gem
##   [1] 155 162 163 167 168 217 223 229 235 250 253 262 271 289 294 308 309 314
##  [19] 315 316 320 326 349 374 376 381 386 403 416 431 450 453 456 457 459 466
##  [37] 467 483 484 504 517 521 522 535 540 546 561 565 568 570 572 575 592 599
##  [55] 601 602 620 621 624 625 627 653 667 677 679 681 683 685 687 690 696 702
##  [73] 714 717 718 720 721 723 725 734 735 736 751 756 765 782 783 784 785 786
##  [91] 788 792 797 798 808 809 813 815 819 820 822 825 826 827 834 835 836 837
## [109] 841 844 845 846 849 851 852 853 855 866 870 875 877 880 882 887 891 893
## [127] 900 903 904 908 909

On a toutes les localisation de chaque espèce

Exemple d’appel pour les localisation de Gem : listSubsets$gem

==> moyenne des données sur l’habitat pour chaque colonne du subset (espèces)

Pour se donner une idée de vers ou on vas, nous allons regarder chaque moyenne de variables

par(mfrow = c(1,1))
ExGem = colMeans(subset(habitat, habitat$IdPE %in% listSubsets$Gem))
plot(ExGem[-1])

Nous voyons que les unitées sont biaisées, il est donc nécécaire de normaliser

Généraliser par une boucle tapply :

ExMat = t(sapply(names(listSubsets), function(name) {
  colMeans(subset(habitat, habitat$IdPE %in% listSubsets[[name]]))
}))
ExMat = ExMat[,-1]

/!\ sapply == tapply mais pour sortir une matrice et pas une liste /!\

ChiTest²

chisq.test(habitat[,2:17])
## 
##  Pearson's Chi-squared test
## 
## data:  habitat[, 2:17]
## X-squared = 690042, df = 13695, p-value < 2.2e-16
for (i in 2:17){
  print(chisq.test(habitat[,i]))
}
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 313058, df = 913, p-value < 2.2e-16
## 
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 89333, df = 913, p-value < 2.2e-16
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 233.85, df = 913, p-value = 1
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 56.511, df = 913, p-value = 1
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 270.42, df = 913, p-value = 1
## 
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 8438.3, df = 913, p-value < 2.2e-16
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 199.98, df = 913, p-value = 1
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 232.85, df = 913, p-value = 1
## 
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 10470, df = 913, p-value < 2.2e-16
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 501.45, df = 913, p-value = 1
## 
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 56212, df = 913, p-value < 2.2e-16
## 
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 4639.3, df = 913, p-value < 2.2e-16
## 
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 242481, df = 913, p-value < 2.2e-16
## 
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 167676, df = 913, p-value < 2.2e-16
## 
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 70.922, df = 913, p-value = 1
## 
##  Chi-squared test for given probabilities
## 
## data:  habitat[, i]
## X-squared = 18.291, df = 913, p-value = 1

Les colonnes satisfaisant le Chi-test :

  • logitude
  • latitude
  • agri
  • arbu
  • hydro
  • foret
  • ecot
  • temp
  • bati
boxplot(ExMat,
     pch = 3, col = "darkred",
     log = "y")

Boxplot avec une normalisation au log10()

ExMat.meannorm = scale(ExMat, center = T, scale = T)
boxplot.matrix(ExMat.meannorm, col = "darkred")

normalisation centré réduite à la moyenne

Des boxplots plus interresant (par classe):

par(mfrow = c(1,2))

#   1. Point d'écoute : 

plot(ExMat[,1:2],
     pch = 3, col = "brown")

acp.Ecoute = dudi.pca(ExMat[,1:2], center = TRUE, scale = TRUE,
                 ,scannf = FALSE, nf = 1)
plot(acp.Ecoute$li,
     pch = 3, col = "brown")

#corrélation +

#  2. Occupation du sol : 
  
boxplot(ExMat[,3:7],
     pch = 3, col = "darkgreen")

acp.Ocuu = dudi.pca(ExMat[,3:7], center = TRUE, scale = TRUE,
                 scannf = FALSE, nf = 2)
plot(acp.Ocuu$li,
     pch = 3, col = "darkgreen")

# pas de corrélation

#  3. Fragmentation : 

boxplot(ExMat[,8:11],
     pch = 3, col = "salmon")


acp.Frag = dudi.pca(ExMat[,8:11], center = TRUE, scale = TRUE,
                 scannf = FALSE, nf = 2)
plot(acp.Frag$li,
     pch = 3, col = "salmon")

# pas de corrélation

#  4. Topographie

plot(ExMat[,12:13],
     pch = 3, col = "black")

acp.Topo = dudi.pca(ExMat[,12:13], center = TRUE, scale = TRUE,
                 scannf = FALSE, nf = 1)
plot(acp.Topo$li,
     pch = 3, col = "black")

# corrélation +

#  5. condition topographique

plot(ExMat[,14:15],
     pch = 3, col = "darkblue")

acp.CondTopo = dudi.pca(ExMat[,14:15], center = TRUE, scale = TRUE,
                 scannf = FALSE, nf = 1)
plot(acp.CondTopo$li,
     pch = 3, col = "darkblue")

# corrélation -

#  6. Urbanisation

par(mfrow = c(1,1))
boxplot(ExMat[,16],
     pch = 3, col = "darkgray")

# c'est une ligne

# 7. Total
par(mfrow = c(1,2))
boxplot(ExMat,
     pch = 3, col = "darkred",
     las = 2, log = "y")
acp.Total = dudi.pca(ExMat[,1:15], center = TRUE, scale = TRUE,
                     scannf = FALSE, nf = 2)

# bordel imonde

  • Point d’écoute semble avoir une corrélation positive

  • Occupation du sol ne semble pas être corrélé

  • Fragmentation ne semble pas être corrélé

  • Topographie semble être corrélé positivement

  • condition topographique semble être corrélé négativement

==> expliquer chacune des variables de l’espèce en fonction des variables de l’environnement

--> Ex :  taille petite quand température haute, alimentation quand hydrométrie élevée

Faire des AFD par catégorie pour voir si impact sur l’alimentation

# discrimin = AFD
# les arg : (acp, var qualitative)
afd.Ecoute.Taille = discrimin(acp.Ecoute,as.factor(especes$Taille)
                 , scannf = FALSE, nf = 2)

plot(afd.Ecoute.Taille)

#########
afd.Ocuu.Taille = discrimin(acp.Ocuu,as.factor(especes$Taille)
                 , scannf = FALSE, nf = 2)

plot(afd.Ocuu.Taille)

########
afd.Frag.Taille = discrimin(acp.Frag,as.factor(especes$Taille)
                 , scannf = FALSE, nf = 2)

plot(afd.Frag.Taille)

########
afd.Mat.Taille = discrimin(acp.Topo,as.factor(especes$Taille)
                 , scannf = FALSE, nf = 2)

plot(afd.Ecoute.Taille)

########
afd.CondTopo.Taille = discrimin(acp.CondTopo,as.factor(especes$Taille)
                 , scannf = FALSE, nf = 2)

plot(afd.CondTopo.Taille)

==> conclure :

Lieu d’écoute vs Taille des espèces :

pas de création concluante de classe

12 et 23 peu expliquer par les 2 axes

20 et 24 ont les coordonnées similaires 9 et 30 // (// == pareil qu’au dessus) 11 et 14 // 11, 14 et 20,24 sont opposé


Ocuu vs Taille des espèces :

toujours aucune classe concluante à part pour grouper le groupe 12 : Moqueur.grivotte

15 peu expliquer par le modèle arbu et hydro sont peu explicatif de notre modèle

l’espèce 23 a tendance a se retrouver en foret avec des grandes surfaces agricole


Frag vs Taille des espèces :

rien de concluant

Les 4 variables sont explicative mais ont des vélocités colinéaires

l’espèce 30 est très ecot mais très peu heter et lisi


Topo vs Taille des espèces :

pas de création concluante de classe

Les 2 variables sont explicative mais ont des vélocités colinéaires

sépare les espèces correctment ___

CondTopo vs Taille des espèces :

same

Les 2 variables sont explicative mais ont des vélocités colinéaires


Global : on ne peut pas classer la taille des espèces en fonction de l’environnement

Cependant on voit que on peut séparer les tailles des espèces par l’environnement

==== QUESTION 3 ====

–> habitat : urbanisation –> communautés : répartition des espèces

==> impact de l’urbanisation sur la répartition attendues naturelles des espèces –> moins d’espèces 1 ou plus d’espèces 2 en zones urbaines que rurales…

ANALYSE : ==> chi² entre commu et habitat\(bati ==> ACP(commu[,2:length(commu[1,])]~habitat\)bati)

==> conclure : certaines espèces fuient les milieux urbains quand d’autres si refugent

==== QUESTION 4 ====

–> habitat : urbanisation –> espèces : taille

==> impact de l’urbanisation sur la taille des oiseaux (diminution de la taille pour se cacher de l’Homme ?)

habitat = read.table("../data/habitat.tsv", sep = "\t",
                     stringsAsFactors = T, header = T, na.strings = T)
habitat = habitat[,-2:-3] # on supprime le qualitatif

especes = read.table("../data/especes.tsv", sep = "\t",
                     stringsAsFactors = T, header = T, na.strings = T)

commu = read.table("../data/communautes.tsv", sep = "\t",
                   stringsAsFactors = T, header = T, na.strings = T)

on vas chercher si ya une corrélation entre la taille et l’espèce de volatile :

création des subsets par espèces

# Récupération des noms des colonnes correspondant aux espèces (colonnes 2 à 17)
vectNom <- c("Myo", "Gem", "Meh", "Col", "Lon", "Cir", "Euh", "Orc", "Euj", "Cof", "Dep", "Mas", "Maf", "Saa", "Elm", "Tul")

# Création d'une liste vide pour stocker les sous-ensembles
listSubsets = list()
# Parcours de toutes les espèces
for (i in 1:length(vectNom)) {
  especesActu = vectNom[i]
  # Extraction des numéros de lieu (IdPE) où l'espèce a une présence (valeur 1)
  foosubset = commu$IdPE[commu[[especesActu]] == 1]
  listSubsets[[especesActu]] = foosubset
}

# /!\ va faire vla des lignes de variables :
for (i in seq_along(vectNom)) {
  subset_name <- paste0(vectNom[i], "habitat")
  assign(subset_name, subset(habitat, IdPE %in% listSubsets[[vectNom[i]]]))
  
  # Modify column 20 with corresponding 'Taille' value
  temp_df <- get(subset_name)
  temp_df[, 18] <- especes$Taille[i]
  assign(subset_name, temp_df)
}

faire les dataframes

on a les positions des oiseaux par espèces dans les n° IDPG

faire les Chi² pour voir si la taille est indépendente chez chaque espèces :

chi_results <- list()
for (nom in vectNom) {
  subset_name <- paste0(nom, "habitat")
  temp_df <- get(subset_name)
  
  if ("bati" %in% colnames(temp_df)) {  # Ensure 'bati' column exists
    chi_results[[nom]] <- chisq.test(temp_df$bati)
  } else {
    chi_results[[nom]] <- paste("Column 'bati' not found in", subset_name)
  }
}

malaise,

on regrope par intervalle de taille

test cor.test entre taille et urbanisation

meanList = c()

meanList = append(meanList, mean(Myohabitat$bati))
meanList = append(meanList, mean(Gemhabitat$bati))
meanList = append(meanList, mean(Mehhabitat$bati))
meanList = append(meanList, mean(Colhabitat$bati))
meanList = append(meanList, mean(Lonhabitat$bati))
meanList = append(meanList, mean(Cirhabitat$bati))
meanList = append(meanList, mean(Euhhabitat$bati))
meanList = append(meanList, mean(Orchabitat$bati))
meanList = append(meanList, mean(Eujhabitat$bati))
meanList = append(meanList, mean(Cofhabitat$bati))
meanList = append(meanList, mean(Dephabitat$bati))
meanList = append(meanList, mean(Mashabitat$bati))
meanList = append(meanList, mean(Mafhabitat$bati))
meanList = append(meanList, mean(Saahabitat$bati))
meanList = append(meanList, mean(Elmhabitat$bati))
meanList = append(meanList, mean(Tulhabitat$bati))

on a les moyennes : chi² time :)

vérification validité cor.test

vérification normalité

#normalité : 
shapiro.test(meanList)
## 
##  Shapiro-Wilk normality test
## 
## data:  meanList
## W = 0.93103, p-value = 0.2532
shapiro.test(especes$Taille)
## 
##  Shapiro-Wilk normality test
## 
## data:  especes$Taille
## W = 0.91199, p-value = 0.1253

données normales

vérification linéralité

plot(meanList,especes$Taille,
     pch =3, col = "red3",
     ylab = "taille des especes",xlab = "moyenne urbanisation par espèces") 

Bah pas fou mais globalement avec clémence, on semble voir une tendence à la décroissance

test homoscédasticité

library(lmtest)
bptest(meanList~especes$Taille)
## 
##  studentized Breusch-Pagan test
## 
## data:  meanList ~ especes$Taille
## BP = 0.34564, df = 1, p-value = 0.5566

données homostasiques

Conditions valides : happy

cor.test(especes$Taille,meanList,
         method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  especes$Taille and meanList
## t = -1.7395, df = 14, p-value = 0.1039
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.75872141  0.09372149
## sample estimates:
##        cor 
## -0.4215692
cor.test(especes$Taille,meanList,
         method = "kendall")
## 
##  Kendall's rank correlation tau
## 
## data:  especes$Taille and meanList
## z = -1.4506, p-value = 0.1469
## alternative hypothesis: true tau is not equal to 0
## sample estimates:
##        tau 
## -0.2735942
cor.test(especes$Taille,meanList,
         method = "spearman")
## 
##  Spearman's rank correlation rho
## 
## data:  especes$Taille and meanList
## S = 958.44, p-value = 0.1153
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
##        rho 
## -0.4094659

t = -1.7395, df = 14, p-value = 0.1039 alternative hypothesis: true correlation is not equal to 0

95 percent confidence interval: -0.75872141 0.09372149

sample estimates: cor -0.4215692

Conclusion :

La taille de l’espèce et le taux d’urbanisation est négativement corrélé

==== QUESTION 5 ====

–> habitat : urbanisation –> espèces : protégée ou non ?

==> est-ce que les oiseaux protégés sont davantages présents dans les milieux urbains : protection intense par l’Homme, abondance de nourriture, absence de prédateurs, habitats cachés et sécuritaires…

ANALYSE :

==> chi² entre habitat bati et especes IUCN

en premier on va faire une ACM entre les espèces sauf la taille et

vectCol = c("IdPE","agri","arbu","prai","foret","bati")
habitaEnv.subset = subset(habitat,select = vectCol)

on vas chercher si ya une corrélation entre espèces protégé et l’espèce de volatile :

# Récupération des noms des colonnes correspondant aux espèces (colonnes 2 à 17)
vectNom <- c("Myo", "Gem", "Meh", "Col", "Lon", "Cir", "Euh", "Orc", "Euj", "Cof", "Dep", "Mas", "Maf", "Saa", "Elm", "Tul")

# Création d'une liste vide pour stocker les sous-ensembles
listSubsets = list()
# Parcours de toutes les espèces
for (i in 1:length(vectNom)) {
  especesActu = vectNom[i]
  # Extraction des numéros de lieu (IdPE) où l'espèce a une présence (valeur 1)
  foosubset = commu$IdPE[commu[[especesActu]] == 1]
  listSubsets[[especesActu]] = foosubset
}

# /!\ va faire vla des lignes de variables :

on va faire comme a la Q4 mais avec plus de variable

# Liste des noms d'habitat
habitat_names <- c("Myohabitat", "Gemhabitat", "Mehhabitat", "Colhabitat", "Lonhabitat", 
                   "Cirhabitat", "Euhhabitat", "Orchabitat", "Eujhabitat", "Cofhabitat", 
                   "Dephabitat", "Mashabitat", "Mafhabitat", "Saahabitat", "Elmhabitat", "Tulhabitat")

# liste des diminutif des noms
vectNom <- c("Myo", "Gem", "Meh", "Col", "Lon", "Cir", "Euh", "Orc", "Euj",
             "Cof", "Dep", "Mas", "Maf", "Saa", "Elm", "Tul")

# Liste des colonnes d'intérêt
vectCol <- c("agri", "arbu", "prai", "foret", "bati")

# Initialisation d'une liste pour stocker les données
meanList <- data.frame(matrix(ncol = length(vectCol) + 1, nrow = length(habitat_names)))

# Nommer les colonnes du dataframe
colnames(meanList) <- c("habitat", vectCol)

# Remplir le dataframe
for (i in seq_along(habitat_names)) {
  habitat <- habitat_names[i]
  habitat_data <- get(habitat)  # Récupération du dataframe
  
  # Calcul des moyennes pour chaque colonne d'intérêt
  mean_values <- sapply(vectCol, function(col) mean(habitat_data[[col]], na.rm = TRUE))
  
  # Stockage des résultats
  meanList[i, ] <- c(habitat, mean_values)
}

# Convertir la colonne 'habitat' en facteur ou caractère
meanList$habitat <- as.character(vectNom)

# Affichage du résultat
meanList = data.frame(meanList)

# Conversion des colonnes en numérique car bozo est char
meanList[,-1] <- lapply(meanList[,-1], as.numeric)

faire les dataframes

ACM entre les moyennes et les espèces :

ACM_Espèces = dudi.acm(especes[,-6],
                       scannf = FALSE, nf = 2)

boxplot(ACM_Espèces)

AFD pour expliquer espèces par leur moyenne intra-espèces :

1 faire l’ACP

acp.meanhabi = dudi.pca(meanList[,-1],
         center = T, scale = T,
         scannf = FALSE, nf = 2)

2 faire une AFC

acm.espèces = dudi.acm(as.data.frame(especes[-6]),
                       scannf = FALSE, nf = 2)
boxplot(acm.espèces)

coinertie = coinertia(acm.espèces,acp.meanhabi,
                      scannf = FALSE, nf = 2); summary(coinertie)
## Coinertia analysis
## 
## Class: coinertia dudi
## Call: coinertia(dudiX = acm.espèces, dudiY = acp.meanhabi, scannf = FALSE, 
##     nf = 2)
## 
## Total inertia: 2.857
## 
## Eigenvalues:
##       Ax1       Ax2       Ax3       Ax4       Ax5 
## 2.2849117 0.5220622 0.0381169 0.0118412 0.0003562 
## 
## Projected inertia (%):
##      Ax1      Ax2      Ax3      Ax4      Ax5 
## 79.96784 18.27125  1.33403  0.41442  0.01247 
## 
## Cumulative projected inertia (%):
##     Ax1   Ax1:2   Ax1:3   Ax1:4   Ax1:5 
##   79.97   98.24   99.57   99.99  100.00 
## 
## Eigenvalues decomposition:
##         eig     covar       sdX      sdY      corr
## 1 2.2849117 1.5115925 0.7922154 1.977465 0.9649009
## 2 0.5220622 0.7225387 0.7384785 1.006445 0.9721502
## 
## Inertia & coinertia X (acm.espèces):
##      inertia      max     ratio
## 1  0.6276052 0.891648 0.7038711
## 12 1.1729557 1.729395 0.6782461
## 
## Inertia & coinertia Y (acp.meanhabi):
##     inertia      max     ratio
## 1  3.910367 3.919180 0.9977513
## 12 4.923298 4.923885 0.9998808
## 
## RV:
##  0.2988435
s.corcircle(coinertie$li)

plot(coinertie)

on arrive a séparer les espèces en fonctions decès variables environnementales

X = acm Y = acp

==> conclure :

l’ACP explique super bien la co-inertie l’ACM moins mais explique quand même les 2 axes

Les 2 ont une bonne corrélation car les projection de tabX et tabY (les projections des 2 axes) sont très proches.

on voit que les variables espèces sont corrélée avec les variables